Micron Document
____ _ _ _ _
| _ \ ___ | |_ (_) _ __ ___ __| | (_) __ _
| |_) | / _ \ | __| | | | '_ \ / _ \ / _| | | | / _ |
| _ < | __/ | |_ | | | |_) | | __/ | (_| | | | | (_| |
|_| \_\ \___| \__| |_| | .__/ \___| \__,_| |_| \__,_|
|_|


The NomadNet German Wikipedia | Archives | Info
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b

πŸ” Search

Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―

Factor
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
Factor ist eine freie Programmiersprache, die von Slava Pestov entworfen und seit 2003 entwickelt wird. Sie ΓΌbernimmt Konzepte aus Forth, Lisp und Smalltalk-80. Sie ist als praxisorientierter Nachfolger von Joy gedacht und eine Implementierung ist unter BSD-Lizenz erhΓ€ltlich.

Contents

β€’ Library
β€’ Listener
β€’ Self-Hosting
β€’ Weblinks

──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Words und Stack

Alle Funktionen lesen ihre Argumente vom Stack, schreiben ihre Ergebnisse auf den Stack und werden als words bezeichnet. Ein Programm ist eine Abfolge von Lexikalen fΓΌr Objekte, die auf den Stack abgelegt werden und words, die auf den Stack angewendet werden.

! Kommentar
2 3 + .

Zuerst werden 2 und 3 auf den Stack abgelegt. + nimmt zwei Zahlen vom Stack und legt die Summe der beiden auf dem Stack ab. . nimmt das oberste Objekt vom Stack und gibt es aus. Kommentare beginnen mit ! und gehen bis zum Ende der Zeile.

: add2 ( n -- n' ) 2 + ;
5 add2

Neue words werden mit : definiert. add2 addiert 2 zur obersten Zahl auf dem Stack.

Words werden in vocabularies zusammengefasst. Mit USE: wird angegeben, in welchem vocabulary words gesucht werden sollen und mit IN: in welchem vocabulary alle folgend definierten words gespeichert werden.

Es kΓΆnnen beliebige Objekte wie Zahlen, Sequences (Arrays, Vectors, Strings, …) usw. auf dem Stack abgelegt werden. FΓΌr alle Objektarten ist eine lexikalische Darstellung definiert.

SYMBOL: foo
"Hello" foo set
foo get

Namen fΓΌr Variablen werden mit SYMBOL: definiert, mit set gesetzt und mit get ausgelesen und auf den Stack abgelegt. Speicher fΓΌr die Objekte wird automatisch alloziert und durch die Garbage Collection wieder freigegeben.

Funktionales Programmieren

Anonyme Funktionen werden in eckigen Klammern geschrieben und als quotations bezeichnet.

{ 1 2 3 } [ 3 + ] map
10 [ "Hello world" print ] times
4 [ 2 + ] [ 3 * ] bi
10 0 < [ "yes" print ] [ "no" print ] if

map nimmt ein Array und eine quotation vom Stack. Die quotation wird auf jedes Element des Arrays angewendet und die Ergebnisse wieder in einem Array auf dem Stack abgelegt. times nimmt eine Zahl n und eine quotation vom Stack. Die quotation wird dann n-mal hintereinander ausgefΓΌhrt. bi nimmt ein Objekt und zwei quotations vom Stack. Beide quotations werden auf das Objekt angewendet und die beiden Ergebnisse auf dem Stack abgelegt. if nimmt einen Wahrheitswert und zwei quotations vom Stack. Ist der Wert true wird die erste quotation ausgefΓΌhrt, ansonsten die zweite quotation.

Objektorientierung

Bei der Objektorientierung ΓΌbernimmt Factor Konzepte aus Common Lisp Object System. Klassen und Methoden werden unabhΓ€ngig voneinander definiert.

TUPLE: rectangle width height ;
: <rectangle> ( width height -- rectangle ) rectangle boa ;
GENERIC: area ( object -- x )
M: rectangle area [ width>> ] [ height>> ] bi * ;
10 20 <rectangle> area

Zur Datenkapselung wird eine Tuple-Klasse mit dem Namen rectangle und den beiden Slots width und height definiert. Das darauf folgend definierte construction-word <rectangle> liest zwei Zahlen vom Stack und belegt die beiden Slots damit. Die fΓΌr rectangle definierte Methode area nimmt ein rectangle-Objekt vom Stack und berechnet die FlΓ€che. Liegt ein Tuple-Objekt auf dem Stack, kΓΆnnen mit slot>> die Daten ausgelesen und mit >>slot die Daten in den Slot des Objekts geschrieben werden.

Library

In Factor ist eine umfassende Bibliothek mit vordefinierten Funktionen enthalten. FΓΌr Erweiterungen existiert eine Schnittstelle zu C-Bibliotheken.

Listener

Der Listener ist die interaktive Entwicklungsumgebung von Factor. Alles was man eingibt wird eingelesen, kompiliert und gegebenenfalls gleich ausgefΓΌhrt. Mit Steuerung-h gelangt man zu einer umfassenden Hilfe und mit Steuerung-w kann man jede Zeile im Single-Step-Verfahren schrittweise durchlaufen. Alle zurzeit im Speicher befindlichen Definitionen und der kompilierte Code werden mit save in einer Image-Datei gespeichert.

Implementierung

Die VM von Factor ist in C++ geschrieben. Der grâßte Teil von Factor, wie der Parser und der Compiler, sind selbst in Factor geschrieben. Es existieren Implementierungen für FreeBSD, Linux, macOS und Windows sowie die Prozessoren x86, x86-64 und PowerPC. Am Anfang des Projektes war die VM in Java geschrieben. Diese wurde aufgrund technischer Unterlegenheit zunÀchst durch eine Implementierung in C ersetzt.cite-ref-1[1]

Self-Hosting

Da Factor hauptsΓ€chlich selbst in Factor geschrieben ist, muss zuerst das Basissystem mit einem Boot-Image erstellt werden. Ein passendes Boot-Image findet man auf der Homepage von Factor.

$ factor -i=boot.<cpu>.image

Das dabei erstellte factor.image ist vom System abhΓ€ngig und enthΓ€lt das bei jedem Start geladene Basissystem von Factor.

Weblinks

β€’ offizielle WebprΓ€senz (englisch)
β€’ Wiki ΓΌber Factor (englisch)
β€’ Anleitung (englisch)

Einzelnachweise

cite-note-11. ↑ Factor/Java Factor. In: concatenative.org. Abgerufen am 23. Mai 2012 (englisch).